#ifndef CHLBC_H
#define CHLBC_H
#include <dtype.h>
//字节码组成格式

//字节码数据头
STRUCT_P(CHBC_FILE_HEADER)
{
	uint32 Magic;//文件标志，固定为'.CHB'
	uint32 BigLittleEndian;//字节码大小端识别标志
	uint16 BytecodeMajor;//字节码格式主版本
	uint16 BytecodeMinor;//字节码格式次版本，一般为0
	uint16 RuntimeMajor;//目标运行时主版本号，高版本运行时兼容低版本字节码格式。
	uint16 RuntimeMinor;//目标运行时次版本号，一般为0
	uint64 PublicKeyToken;//符号公开令牌，可为0
	uint32 ExtendHeadOffset;//扩展头偏移
};

//字节码数据扩展头
STRUCT_P(CHBC_FILE_EXTHEAD)
{
	uint32 Flags;//扩展头标志，固定为'.EXH'
	struct{
		uint16 Major;//主版本号
		uint16 Minor;//次版本号
		uint16 Revision;//修订号
		uint16 Build;//构建号
	}Version;//程序版本号
#   define CHBC_PT_TENUM_UNKNOWN 0X00 //未定义
#   define CHBC_PT_TENUM_LIB 0X01 //类库
#   define CHBC_PT_TENUM_EXE 0X02 //可执行程序
	uint8 ProgramType;//程序类型
#   define  CHBC_OSP_TENUM_ANY 0X00 //多平台
#   define  CHBC_OSP_TENUM_WIN32 0X70 //仅适用于Windows操作系统
#   define  CHBC_OSP_TENUM_LINUX 0X80 //仅适用于Linux操作系统
	uint8 OSPlatform;//操作系统平台
#   define  CHBC_BIT_TENUM_UNKNOWN 0X00 //未定义
#   define  CHBC_BIT_TENUM_32 0X32 //32位程序
#   define  CHBC_BIT_TENUM_64 0X64 //64位程序
	uint8 Bit;//平台位数
#   define  CHBC_IT_TENUM_ANY 0X00 //兼容模式
#   define  CHBC_IT_TENUM_CUI 0X70 //纯控制台程序
#   define  CHBC_IT_TENUM_GUI 0X80 //窗体程序
	uint8 InterfaceOfType;//程序界面类型
	uint32 EntryPointToken;//程序入口点，可执行程序必须，库可为0
	uint32 ConstPoolOffset;//常量节头偏移位置
	uint32 ResourcesOffset;//资源节头偏移位置
	uint32 MateDataOffset;//元数据节头偏移位置
	uint32 CodeOffset;//代码节头偏移位置
	uint32 BlobOffset;//Blob节头偏移位置
};

//元数据表项
STRUCT_P(CHBC_MD_TABLE_INFO)
{
	uint32 TableType;//表类型
	uint32 Count;//元素数量
	uint32 Offset;//偏移位置
	uint32 Lenght;//数据字节长度
};

//元数据节头
STRUCT_P(CHBC_SECTION_MD_HEADER)
{
	uint32 Falgs;//元数据节标志，固定为'.MD\0'
	uint32 TablesCount;//表数量
	CHBC_MD_TABLE_INFO Tabls[];//表列表
};


#endif
